由于公司正在做声纹方面的开发,所以需要对语音数据做压缩,目前想到了三种压缩方式,1是AMR,2是Speex,3是Opus,这里先说第一种方式,在iOS4.0之前是可以进行amr格式的录音的,后来苹果取消了这个声音格式,但是可以使用opencore-amr来将wav格式转换为amr格式。
目前网上的例子大多数都是8Khz采样率的wav文件转AMR,具体可以参照iOS音频格式之AMR和WAV互转(更新支持64位),这里也要感谢这篇博文的作者黄俊鹏,他给我提供了帮助我才找到了方法。但是我们公司由于对于声音采集样本的要求比较高,所以我们要使用16Khz的采样率,那么问题就出现了,在opencore-amr中并没有提供amr-wb的encode方法,8kHZ使用的opencore-amrnb.a的静态库,其中提供了encode和decode的方法,但是对于16Khz使用的是opencore-amrwb的静态库,其中里面只提供了decode的方法,后来通过其他资料我我才明白encode在另外一个项目vo-amrwbenc里面,如果要使用的话必须要单独编译这个项目才可以,项目下载可以看opencore-amr,所以如果需要将16Khz wav文件转为amr文件,只需要编译这个库然后使用就可以了,如果要解码那么还是需要使用原来的opencore-amr库。
#下面就可以编译vo-amrwebenc
1.首先新建一个文件夹,将下载到的vo-amrwbenc-0.1.3.tar.gz压缩包放到里面(有可能下载下来的不一定是这个版本,因为这个库会更新,所以下面的命令也要跟着改变VERSION为对应的下载的压缩包的版本),然后进入这个文件夹,在里面创建build.sh文件,将以下脚本粘贴到文件里面
1 | #!/bin/sh |
##2.修改build.sh的权限,打开终端,cd到新建的文件夹,使用命令 chmod 777 build.sh 修改权限。
##3.修改完成之后在终端执行 ./build.sh 就会在vo-amrwbenc里面生成一个lib-ios文件夹,里面就包含了libvo-amrwbenc.a的静态库和enc_if_h的头文件。
最后我已经将编译好的项目放到github上面
4.更新
——————-2018.8.16更新———————————————
今天有收到issues说编码的效率很慢,然后需要更新open-amr的库然后重新编译,大家需要到opencore-amr下载最新的库,然后重新编译打包静态库,下面附上打包脚本,打包方法和上面一致。同时记得要改一下脚本里面压缩报的版本和压缩后缀。
1 |
|